// 射线法-边界检测-只能检测凸边形（检测点在不在多边形里面）
export function inRange (x, y, points) {
  // points表示多边形的顶点集合
  let inside = false;
  for (let i = 0, j = points.length - 1; i < points.length; j = i++) {
    let xi = points[i][0];
    let yi = points[i][1];
    let xj = points[j][0];
    let yj = points[j][1];
    let intersect = ((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
    if (intersect) {
      inside = !inside;
    }
  }
  return inside;
}

/**
 * 矩形边界检测-中心点判断法
 * @param {*} frameRect
 * @param {*} itemRect
 */
export function checkByPointInRect (frameRect, itemRect) {
  let  x = itemRect.x + itemRect.width / 2;
  let  y = itemRect.y + itemRect.height / 2;
  if (x > frameRect.x && y > frameRect.y && x < (frameRect.x + frameRect.width) && y < (frameRect.y + frameRect.height)) {
    return true;
  } else {
    return false;
  }
}

/**
 * 矩形边界检测-碰撞检测法
 * 两个矩形中心点在x方向的距离的绝对值小于等于矩形宽度和的二分之一，同时y方向的距离的绝对值小于等于矩形高度和的二分之一
 * @param {*} frameRect
 * @param {*} itemRect
 */
export function checkByRectCollisionDetection (frameRect, itemRect) {
  let x1 = frameRect.x + frameRect.w / 2;
  let y1 = frameRect.y + frameRect.h / 2;
  let w1 = frameRect.w;
  let h1 = frameRect.h;
  let x2 = itemRect.x + itemRect.w / 2;
  let y2 = itemRect.y + itemRect.h / 2;
  let w2 = itemRect.w;
  let h2 = itemRect.h;
  if (Math.abs(x1 - x2) < ((w1 + w2) / 2) && Math.abs(y1 - y2) < ((h1 + h2) / 2)) {
    return true;
  } else {
    return false;
  }
}
